跳到主要内容
08:08:54
🔅🔆

Velero 简要说明

什么是 Velero​

Velero(原名 Heptio Ark)是一个专为 Kubernetes 集群设计的开源备份、恢复和迁移工具。

  • 开源项目:由 VMware 维护的 CNCF 沙箱项目
  • 生产就绪:被广泛用于生产环境的 Kubernetes 集群保护
  • 多云支持:支持 AWS、Azure、GCP 及任何兼容 S3 API 的对象存储

主要功能​

功能说明
备份集群资源备份 Deployment、Service、ConfigMap 等所有 Kubernetes 资源
备份持久卷通过快照或文件系统备份方式保护 PV 数据
灾难恢复在集群故障、数据丢失时快速恢复
集群迁移将应用和资源从一个集群迁移到另一个
环境复制将生产环境配置复制到开发/测试环境
定时备份通过 Schedule 资源实现自动定期备份

核心组件​

┌─────────────────────────────────────────────────────────┐
│ 用户本地环境 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Velero CLI (命令行工具) │ │
│ │ • 创建/管理备份 │ │
│ │ • 执行恢复操作 │ │
│ │ • 查看备份状态 │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
│ API 调用
▼
┌─────────────────────────────────────────────────────────┐
│ Kubernetes 集群 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Velero Server (部署在集群内) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ │ │
│ │ │ Controller │ │ Server │ │ Restic │ │ │
│ │ │ (控制器) │ │ (服务端) │ │ (可选) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 对象存储 (备份目标) │ │
│ │ • AWS S3 / 阿里云 OSS / 腾讯云 COS │ │
│ │ • MinIO / RustFS 等 S3 兼容存储 │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘

组件说明​

组件运行位置职责
Velero CLI用户本地机器命令行接口,用于管理备份和恢复操作
Velero ServerKubernetes 集群接收 CLI 请求,协调备份/恢复流程
ControllerKubernetes 集群监听自定义资源(Backup、Restore 等)并执行相应操作
Restic/KopiaKubernetes 集群(可选)提供文件系统级别的卷备份,无需云厂商快照支持

工作原理​

备份流程​

1. 用户执行 velero backup create
│
▼
2. Velero Controller 监听到 Backup 资源创建
│
▼
3. 收集需要备份的 Kubernetes 资源
(Deployments, Services, ConfigMaps, Secrets 等)
│
▼
4. 调用云厂商 API 创建 PV 快照 (如支持)
或通过 Restic/Kopia 进行文件系统备份
│
▼
5. 将资源清单和快照信息上传到对象存储
│
▼
6. 更新 Backup 资源状态为 Completed

恢复流程​

1. 用户执行 velero restore create --from-backup xxx
│
▼
2. Velero Controller 监听到 Restore 资源创建
│
▼
3. 从对象存储下载备份的资源清单和快照信息
│
▼
4. 调用云厂商 API 从快照恢复 PV 数据
│
▼
5. 将 Kubernetes 资源应用到集群
│
▼
6. 更新 Restore 资源状态为 Completed

基本概念​

概念英文说明
备份Backup一次备份操作的结果,包含资源清单和快照引用
恢复Restore将备份还原到集群的操作
定时备份Schedule定义备份计划,自动创建 Backup
备份存储位置BackupStorageLocation (BSL)配置备份数据存储的位置和访问方式
快照存储位置VolumeSnapshotLocation (VSL)配置卷快照的存储位置
选择器Label Selector通过标签选择器过滤需要备份的资源
TTLTime To Live备份的存活时间,过期自动删除

备份类型​

类型说明适用场景
完整备份备份整个集群或命名空间的所有资源定期全量备份
按需备份备份指定的资源或命名空间重要操作前的手动备份
定时备份按 Cron 表达式自动执行备份日常自动化保护
增量备份仅备份变化的数据 (需要 Restic/Kopia)节省存储空间

典型使用场景​

1. 灾难恢复​

# 场景:集群故障或数据丢失后恢复

# 1. 在新集群安装 Velero
# 2. 配置相同的备份存储位置
# 3. 执行恢复
velero restore create --from-backup production-backup-20240101

2. 集群迁移​

# 场景:从旧集群迁移到新集群

# 源集群:创建完整备份
velero backup create full-cluster-backup

# 目标集群:恢复备份
velero restore create --from-backup full-cluster-backup

3. 环境复制​

# 场景:将生产环境配置复制到测试环境

# 只备份特定命名空间
velero backup create prod-to-test --include-namespaces app-prod

# 恢复到测试集群时更改命名空间
velero restore create --from-backup prod-to-test \
--namespace-mappings app-prod:app-test

4. 实验回滚​

# 场景:进行危险操作前创建快照

# 创建即时备份
velero backup create before-upgrade --ttl 72h

# 如果升级失败,恢复到备份时的状态
velero restore create --from-backup before-upgrade

5. 定时备份​

# 创建每天凌晨 2 点的定时备份
velero schedule create daily-backup \
--schedule="0 2 * * *" \
--include-namespaces critical-apps \
--ttl 720h

快速开始​

安装 CLI​

# macOS (Homebrew)
brew install velero

# Linux (下载二进制)
wget https://github.com/vmware-tanzu/velero/releases/download/v1.18.0/velero-v1.18.0-linux-amd64.tar.gz
tar -xvf velero-v1.18.0-linux-amd64.tar.gz
sudo mv velero-v1.18.0-linux-amd64/velero /usr/local/bin/

# 验证安装
velero version

安装服务端​

# 添加 Helm 仓库
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts/

# 安装 Velero (以 S3 兼容存储为例)
helm install velero vmware-tanzu/velero \
--namespace velero --create-namespace \
--set credentials.useSecret=true \
--set credentials.secretContents.cloud="\
[default]
aws_access_key_id=YOUR_ACCESS_KEY
aws_secret_access_key=YOUR_SECRET_KEY" \
--set configuration.backupStorageLocation[0].name=default \
--set configuration.backupStorageLocation[0].provider=aws \
--set configuration.backupStorageLocation[0].bucket=velero-backups \
--set configuration.backupStorageLocation[0].config.region=minio \
--set configuration.backupStorageLocation[0].config.s3Url=http://minio.example.com \
--set configuration.backupStorageLocation[0].config.s3ForcePathStyle=true \
--set snapshotsEnabled=false

常用命令​

# ========== 备份管理 ==========
# 创建备份
velero backup create <backup-name>
velero backup create <backup-name> --include-namespaces <ns1,ns2>
velero backup create <backup-name> --selector <label-key>=<label-value>

# 查看备份
velero backup get
velero backup describe <backup-name>
velero backup logs <backup-name>

# 删除备份
velero backup delete <backup-name>

# ========== 恢复管理 ==========
# 创建恢复
velero restore create --from-backup <backup-name>
velero restore create --from-backup <backup-name> --namespace-mappings old-ns:new-ns

# 查看恢复
velero restore get
velero restore describe <restore-name>
velero restore logs <restore-name>

# ========== 定时备份 ==========
# 创建定时任务
velero schedule create <schedule-name> --schedule="0 2 * * *"

# 查看定时任务
velero schedule get

# ========== 查看状态 ==========
# 查看 Velero 状态
velero status

# 查看备份存储位置
velero backup-location get

Cron 表达式示例​

表达式说明
0 2 * * *每天凌晨 2 点
0 2 * * 0每周日凌晨 2 点
0 */6 * * *每 6 小时
0 0 1 * *每月 1 号零点

配置示例​

备份特定命名空间​

apiVersion: velero.io/v1
kind: Backup
metadata:
name: app-backup
namespace: velero
spec:
includedNamespaces:
- app-production
- app-staging
ttl: 720h0m0s # 备份保留 30 天

排除某些资源​

apiVersion: velero.io/v1
kind: Backup
metadata:
name: selective-backup
namespace: velero
spec:
includedNamespaces:
- "*"
excludedResources:
- nodes
- events
- backups.velero.io
- restores.velero.io
ttl: 168h0m0s # 保留 7 天

按标签选择备份​

apiVersion: velero.io/v1
kind: Backup
metadata:
name: labeled-backup
namespace: velero
spec:
labelSelector:
matchLabels:
app: critical
backup: "true"

最佳实践​

备份策略​

场景建议
生产环境每日全量备份 + 关键操作前手动备份
测试环境每周备份或按需备份
重要数据启用 Restic/Kopia 进行文件系统级备份
长期归档设置较长 TTL 或永久保存关键备份

安全建议​

  1. 访问控制:限制 Velero ServiceAccount 权限,遵循最小权限原则
  2. 加密存储:启用对象存储的服务端加密
  3. 凭证管理:使用 Kubernetes Secrets 存储访问凭证
  4. 网络隔离:限制 Velero 与对象存储之间的网络访问
  5. 定期演练:定期测试备份恢复流程,确保备份可用

监控告警​

# 检查备份状态
velero backup get --sort-by=.status.startTimestamp

# 查看失败的备份
velero backup get | grep Failed

# 检查备份存储位置状态
velero backup-location get

常见问题​

问题可能原因解决方案
备份失败对象存储配置错误检查 BSL 配置和访问凭证
快照失败云厂商 API 权限不足检查 IAM 权限配置
恢复失败资源冲突或依赖问题使用 --wait 参数或调整恢复顺序
备份过大包含了不必要的资源使用排除列表过滤资源
备份过慢大量小文件或大卷启用并发备份或优化网络

相关文档​

🛡️本站已安全运行2295天22时43分50秒
Bottom GIF
Top GIF